import {Base} from '../../utils/util.js';

class Cart extends Base{
   constructor(){
     super();
     this._storageKeyName ='cart';

   }

   //添加购物车
     /*
    * 加入到购物车
    * 如果之前没有样的商品，则直接添加一条新的记录， 数量为 counts
    * 如果有，则只将相应数量 + counts
    * @params:
    * item - {obj} 商品对象,
    * counts - {int} 商品数目,
    * */

   addCart(item,counts){
      var cartData = this.getCartDataFromLocal();
      var isHasInfo = this._isHasThatOne(item.id,cartData);
      if(isHasInfo.index == -1){//表示是新的商品
          item.counts = counts;
          item.selectStatus = true;  //默认在购物车中为选中状态
          cartData.push(item);
      }else{//已近存在购物车中了，值修改该商品的数量
          cartData[isHasInfo.index].counts += counts;
      }
      this.execSetStorageSync(cartData);  //更新本地缓存
      return cartData;
   }


   //获取缓存中读取购物车数据
   getCartDataFromLocal(flag) {
     var res = wx.getStorageSync(this._storageKeyName);
     if(!res){
       res = [];
     }

     if (flag) {//获取选中商品
       var newRes = [];
       for (let i = 0; i < res.length; i++) {
         if (res[i].selectStatus) {
           newRes.push(res[i]);
         }
       }
       res = newRes;
     } 
     return res;
   }

   //判断某商品是否在购物车中，并且返回这个商品的数据及下标返回
   _isHasThatOne(id,arr){
      var item;
      var result = {index:-1};
      for(var i =0;i<arr.length;i++){
         if(arr[i].id==id){//说明在缓存数据中已经存在了数据了
            result = {
              index:i,
              data:item
            };
            break;
         }
      }
      return result;
   }

  /**
   * 计算购物车商品的数量
   *flag存在则表示获取选中的商品的数量 
   */
  getCartTotalCounts(flag){
     var data = this.getCartDataFromLocal();
     var counts=0;
     for(var i=0;i<data.length;i++){
       if(flag){//获取选中商品的数量
         if (data[i].selectStatus){
           counts += data[i].counts;
         }
       }else{
         counts += data[i].counts; //全部商品的数量
       }
     }
     return counts;
  }


  //修改商品数量
  changeCartNum(id,types){
    //获取缓存中的数据
    var cartData = this.getCartDataFromLocal();
    var hasInfo = this._isHasThatOne(id, cartData);
    if(hasInfo.index !=-1){
      if (types == 'reduce') {
        cartData[hasInfo.index].counts--
      } else if (types == 'add') {
        cartData[hasInfo.index].counts++
      }
       
    }
    //更新缓存中数据
    this.execSetStorageSync(cartData);
    return cartData;
  }

  //删除购物车
  deleteCart(id){
    var cartData = this.getCartDataFromLocal();
    var hasInfo = this._isHasThatOne(id,cartData);
    if(hasInfo.index !=-1){
       cartData.splice(hasInfo.index,1);
    }
    //更新缓存中的数据
    this.execSetStorageSync(cartData);
    return cartData;
  }

   /*本地缓存 保存／更新*/
   execSetStorageSync(data) {
     wx.setStorageSync(this._storageKeyName, data);
   };

}

export {Cart};








